home *** CD-ROM | disk | FTP | other *** search
- #include "masks.h"
-
- /* Map a command line given name to a Mac name. If LATIN1 is not defined
- the translation is direct, except that \ is handled special. \\ is
- translated to \, \ddd (three digits) is translated to the octal code.
- If LATIN1 is defined, special care has been taken with the 8 bit chars
- to get a proper mapping, if possible. Note: colon is translated to _. */
- static char char_mapping[] = {
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- ' ', '!', '"', '#', '$', '%', '&', '\'',
- '(', ')', '*', '+', ',', '-', '.', '/',
- '0', '1', '2', '3', '4', '5', '6', '7',
- '8', '9', '_', ';', '<', '=', '>', '?',
- '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
- 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
- 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
- 'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
- '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
- 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
- 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
- 'x', 'y', 'z', '{', '|', '}', '~', 0177,
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- #ifndef LATIN1
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_',
- '_', '_', '_', '_', '_', '_', '_', '_'};
- #else /* LATIN1 */
- '_', 0301, 0242, 0243, 0327, 0265, '_', 0244,
- 0254, 0251, '_', 0307, 0302, '_', 0250, '_',
- 0241, 0261, '_', '_', 0253, '_', 0246, 0245,
- '_', '_', '_', 0310, '_', '_', '_', 0300,
- 0313, 0207, 0211, 0313, 0200, 0201, 0256, 0202,
- 0217, 0203, 0220, 0221, 0223, 0314, 0224, 0225,
- '_', 0204, 0230, 0227, 0231, 0233, 0205, '_',
- 0257, 0235, 0234, 0236, 0206, '_', '_', 0247,
- 0210, 0207, 0211, 0213, 0212, 0214, 0276, 0215,
- 0217, 0216, 0220, 0221, 0223, 0222, 0224, 0225,
- '_', 0226, 0230, 0227, 0231, 0233, 0232, 0326,
- 0277, 0235, 0234, 0236, 0237, '_', '_', 0330};
- #endif /* LATIN1 */
-
- void backtrans(macname, name)
- char *macname, *name;
- {
- char *in, *out;
- int c, count = 0;
-
- out = macname;
- for (in = name; *in; in++){
- if(count == 31) {
- break;
- }
- if(*in != '\\') {
- *out++ = char_mapping[*in & BYTEMASK];
- count++;
- continue;
- }
- in++;
- if(*in == 0) {
- break;;
- }
- if(*in < '0' || *in > '9') {
- *out++ = char_mapping[*in & BYTEMASK];
- count++;
- continue;
- }
- c = *in - '0';
- in++;
- if(*in < '0' || *in > '9') {
- *out++ = c;
- count++;
- in--;
- continue;
- }
- c = (c << 3) + *in - '0';
- in++;
- if(*in < '0' || *in > '9') {
- *out++ = c;
- count++;
- in--;
- continue;
- }
- c = (c << 3) + *in - '0';
- *out++ = c;
- count++;
- }
- *out++ = 0;
- }
-
-